import COS from 'cos-js-sdk-v5'
import { ElLoading, ElMessage } from 'element-plus'
import request from '@utils/http/index.js'
// 上传到腾讯云cos
/*
 * file 选取的文件
 *
 * */
let loadingInstance
// oss前缀
let prefix = 'https://cdn.hnqingnai.com/'
export function uploadObject(file, type = 1, callback) {
  /*
     1.获取临时秘钥data
     2.初始化
     3.判断上传文件的类型
     4.判断文件大小 是否需要分片上传
     */
  let fileName = file.name || ''
  const origin_file_name = fileName
    .split('.')
    .slice(0, fileName.split('.').length - 1)
    .join('.') // 获取文件名称
  // 获取当前时间戳 与文件类型拼接 为cos.putObject里的参数Key
  return new Promise((resolve, reject) => {
    // 获取密钥
    if (type === 1) {
      loadingInstance = ElLoading.service({
        fullscreen: true,
        lock: true,
        text: '上传中...',
        background: 'rgba(122, 122, 122, 0.8)'
      })
    }
    const getCosApi = type === 1 ? getCosToken : getApkCos
    getCosApi(fileName).then((res) => {
      // 后台接口返回 密钥相关信息
      const data = res.data
      const { credentials } = data
      // 初始化
      let cos = new COS({
        getAuthorization: (options, callback) => {
          callback({
            TmpSecretId: credentials.tmpSecretId,
            TmpSecretKey: credentials.tmpSecretKey,
            XCosSecurityToken: credentials.sessionToken,
            StartTime: data.startTime,
            ExpiredTime: data.expiredTime
          })
        }
      })
      // 获取上传文件大小
      let size = file.size
      let key = JSON.parse(JSON.stringify(data.key))
      console.log('key', key)
      // if (size / (1024 * 1024) < 5) { // 文件小于5M走普通上传
      console.log('文件普通上传')
      cos.putObject(
        {
          Bucket: data.Bucket, // 存储桶名称
          Region: data.Region, // 存储桶所在地域，必须字段
          Key: key, // 文件名称
          StorageClass: 'STANDARD',
          Body: file, // 上传文件对象
          onProgress: function (progressData) {
            console.log('progressData', progressData)
            callback(progressData)
          }
        },
        (err, data) => {
          if (err) {
            ElMessage.error('文件上传失败,请重新上传')
            reject(err)
          } else {
            console.log('upload-sussecc', data)
            let fileUrl = data.Location.replace(
              'qingnai-1329034147.cos.ap-guangzhou.myqcloud.com/',
              prefix
            )
            // let fileUrl = prefix + key
            resolve({ url: fileUrl, name: origin_file_name, key: key })
          }
          if (type === 1) {
            loadingInstance.close()
          }
        }
      )
      // }else {
      // 上传分块
      // console.log('data-key',data,key)
      // cos.multipartInit({
      //     Bucket: data.Bucket, // 存储桶名称
      //     Region: data.Region, // 存储桶所在地域，必须字段
      //     Key: key /* 必须 */,
      //     Body: file,
      // },
      // (err, data) => {
      //     console.log(data)
      //     if (err) {
      //         Message({ message: '文件上传失败,请重新上传', type: 'error' })
      //         reject(err)
      //     } else {
      //         let fileUrl = 'https://' + data.Location
      //         vm.$modal.closeLoading()
      //         resolve({url: fileUrl, name: origin_file_name})
      //     }
      // })
      // }
    })
  })
}

function getCosToken(name) {
  return request.post({
    url: '/get_cos_token',
    data: { suffix: name }
  })
}

function getApkCos() {
  return request.post({
    url: '/app_apk_cos'
  })
}
